home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
macros
/
texsis
/
VMS
/
TEXSIS03.COM
< prev
next >
Wrap
Text File
|
1992-08-02
|
83KB
|
1,941 lines
$! === THIS IS AN ARCHIVE FILE -- DELETE EVERYTHING ABOVE THIS LINE ===
$! === THEN EXECUTE THIS FILE WITH "@TEXSIS03.COM" ===
$! Contents:
$! Example.tex
$! Makefile
$! TXSform.tex
$! TXSinit.tex
$! TXSletr.tex
$! TXSprns.tex
$! TXSsects.doc
$! TXStags.tex
$! =========== Example.tex ============
$ copy sys$input Example.tex
% file: Example.tex TeXsis version 2.15
% $Revision: 15.3 $ : $Date: 92/06/30 14:42:28 $ : $Author: myers $
%======================================================================*
% This is a sample paper typeset with TeXsis, to give you a quick idea
% of how it's done. Note: this is just hacked together from an old
% conference proceedings, so it's not a real paper. -EAM
\texsis % this tells everyone that it's a TeXsis manuscript file
% Saying \draft puts a time-stamp, page number, etc. on the page,
% but you don't want it for the final version of the paper.
%%\draft
% Document Format: uncomment one of these lines to select the style
% in which the paper is printed:
%
%\preprint % Preprint style
%\nuclproc % Nuclear Physics Proceedings style
%\twinout\tenpoint\def\Tbf{\twelvebf}\def\tbf{\tenbf}
\PhysRev % Physical Review style
% ---
% some macros used in this paper:
\def\Kb{{\bar K^2 \over \beta_R}}
% ---
% BEGIN:
\titlepage % begin title page material
\title
Noncompact nonlinear sigma models
and numerical quantum gravity
\endtitle
\author
Eric Myers, Bryce DeWitt, Rob Harrington, and Arie Kapulkin
Center for Relativity, Department of Physics\\
University of Texas, Austin, Texas 78705 USA
\endauthor
\abstract
Studying the $O(2,1)$ nonlinear sigma model is a useful step toward
determining whether or not a consistent quantum theory of gravity (based
on the Einstein-Hilbert action) exists. Like gravity, the sigma model
is not perturbatively renormalizable, and corresponding Feynman graphs
in the two theories have the same na\"{\i}ve degrees of divergence. Both
theories also have a single overall dimensionful coupling constant, and
both have a configuration space which is noncompact and curved. The
sigma model allows one to study the renormalizability properties of such
theories without the added complications of local symmetries.
\endabstract
\bigskip
\endtitlepage % will start \doublecolumns for \nuclproc
% ---
% Now start in on the text of the paper...
% ---
Quantum Field Theory and the theory of General Relativity are,
separately, probably the two most successful physical theories of this
century. This notwithstanding, nobody has yet been able to bring the
two together into one complete and consistent quantum theory of gravity.
One major impediment to such a theory is that, unlike gauge field
theories, gravity with the Einstein-Hilbert action
$$
S = {1 \over 16\pi G_N} \int d^4x\, \sqrt{g} R
\EQN 1$$
is not renormalizable, at least not by the usual methods of perturbation
theory. This has lead a number of physicists to adopt the position that
General Relativity is only the low energy limit of some other quantum
theory, such as superstring theory. An alternative view which one
can adopt, however, is that the failure of perturbation theory in the
case of gravity is not an indication that the theory is inconsistent,
but only that the mathematical tools one has used are inadequate. To
pursue a quantum theory of gravity in this direction one needs a
nonperturbative method of calculation: the methods of lattice field
theory, which have already been applied to gauge theories, are
immediately suggested. One also needs a simple model with which to test
the ideas of nonperturbative renormalizability without the complicated
structure of the full theory of General Relativity. This paper
describes our work with such a model, the $O(2,1)$ noncompact nonlinear
$\sigma$-model.\reference{DeWitt, 1989}
B.S.~DeWitt, ``Nonlinear sigma models in 4 dimensions: a lattice definition,''
lectures given at the International School of Cosmology and Gravitation,
``Ettore Majorana'' Centre for Scientific Culture, Erice, Sicily, May 1989
\endreference\relax
The model we consider consists of three scalar fields $\varphi_a$
described by the action
$$
S = \half \mu^2 \int d^4 x \, \eta^{ab}
\del_\mu \varphi_a \del^\mu \varphi_b \,,
\EQN 2$$
with $\eta_{ab}={\rm diag}(-1,+1,+1)$ and with the fields obeying
the constraint
$$
-\varphi_0^2 + \varphi_1^2 + \varphi_2^2 = -1
\qquad (\varphi_0 > 0) \,.
\EQN 3$$
The manifold of constraint is the two dimensional surface of constant
negative curvature represented schematically
in \Fig{1}. It is the coset space
$O(2,1)/O(2)\times Z_2$, but for simplicity we refer to \Eqs{2} and
\Ep{3} as the $O(2,1)$ nonlinear $\sigma$-model. There are several
reasons this model is of interest:
\item{1)}
For dimensionless fields $\varphi_a$ the coupling constant $\mu^2$ has
units of $(length)^2$, the same as $1/G_N$ in the Einstein-Hilbert
action. Thus $\mu$ plays the role of the Planck mass in the theory.
Furthermore this means that Feynman graphs in the $\sigma$-model have
the same na\"{\i}ve degree of divergence as similar graphs in gravity,
so that the model has the same renormalizability structure (actually the
same perturbative non-renormalizability structure) as the theory of
gravity.
\item{2)}
As in gravity, the fields of the $\sigma$-model obey a constraint,
and the configuration space defined by the constraint is both {\it
curved} and {\it noncompact}.
\item{3)}
The surface of constraint is invariant under global $O(2,1)$
transformations, but
% unlike gravity
there is no local symmetry in the
model. This is a great simplification which lets us study just the
renormalizability properties of the model without the added
complications introduced by local symmetries.
\item{4)}
Unlike gravity, the Euclidean action of the $\sigma$-model is bounded
from below. The unboundedness of the gravitational action is a serious
problem which must be dealt with at some point, but one which we want to
avoid entirely for now.
\figure{1}
\forceleft
\vskip\colwidth % just leave some space to glue in figure
%%\epsfbox{o21.ps} % or include with epsf
\caption{The constraint surface of the $O(2,1)$ noncompact nonlinear
$\sigma$-model.}
\endfigure
\medskip
The transcription of the $\sigma$-model to the lattice is more or less
standard with one exception, our definition of the lattice derivative.
Rather than using the simple difference between field values at
neighboring lattice sites we use the geodesic distance between two
points on the constraint surface. The lattice action is thus
$$
S = \half \mu^2 \sum_x a^4 \sum_{\hat\mu}
[{ \Delta(\varphi(x+\hat\mu a), \varphi(x)) \over a}]^2 \,,
\EQN 4$$
where $\Delta(\varphi,\varphi^\prime)$ is the arc length between
$\varphi$ and $\varphi^\prime$ on the manifold,
$$
\Delta(\varphi,\varphi^\prime) =
\cosh^{-1}(-\eta^{ab} \varphi_a\varphi^\prime_b) \,.
\EQN 5$$
Our reason for this choice is that it is consistent with the idea that
the fields be restricted only to the constraint surface of the
$\sigma$-model.
In contrast, simply taking the na\"{\i}ve difference between fields, as
is usually done for compact $\sigma$-models, produces a difference
vector which does not lie in the manifold of constraint. While both
methods lead to the same classical continuum limit there is nothing that
guarantees that the quantum theories obtained from the two lattice
definitions will be the same.
It is convenient to factor the dependence on the lattice spacing $a$
out to the front of \Eq{4} and to define the dimensionless coupling
constant $\beta = \mu^2 a^2$. If the theory is nonperturbatively
renormalizable the Planck mass $\mu$ will be renormalized to $\mu_R$,
which results in a renormalized dimensionless coupling constant
$$
\beta_R = \mu_R^2 a^2 \,.
\EQN 6$$
The renormalized Planck mass defines a characteristic length scale
$1/\mu_R$ for the interactions of the theory. The lattice approximation
to the continuum theory will be reliable when $a \ll 1/\mu_R \ll L=Na$.
Considering each inequality separately, this requires
$$
\mu_R a = \sqrt{\beta_R} \ll 1
\qquad \hbox{\rm and} \qquad
N \gg {1\over \sqrt{\beta_R}}
\EQN 7$$
In the continuum limit $a \to 0$, hence $\beta \to 0$, and for $\mu_R$
to remain finite this requires $\beta_R \to 0$. If this condition is
not fulfilled then it would appear to be impossible to define a
consistent quantum field theory from the $\sigma$-model, even
nonperturbatively.
%----------------------------
\figure{2}
\forceright % force this to the righthand column
\vskip\colwidth % leave this much space
%%\epsfbox{beta.ps} % or include with EPSF
\caption{The renormalized dimensionless coupling constant $\beta_R$
plotted against the bare coupling constant $\beta$ for an $N=10$
lattice.}
\endfigure
%----------------------------
In \Fig{2} we show $\beta_R$ plotted as a function of $\beta$ as
obtained from Monte Carlo simulations on an $N=10$ lattice. As can
clearly be seen, $\beta_R$ vanishes nowhere. We therefore conclude that
the $O(2,1)$ nonlinear sigma model does not have an interacting
continuum limit. One may view $1/\mu_R$ as the renormalized coupling
constant in the theory, in which case our result implies that the model
is ``trivial'' (in the technical sense) in that the continuum limit is a
free field theory.
This work was supported by NSF grants PHY\-8617103 and PHY\-8919177.
\smallskip
%\nosechead{References} % header for references
%\nobreak
\ListReferences
\bye
%>>> EOF Example.tex <<<
$! =========== Makefile ============
$ copy sys$input Makefile
# texsis/Makefile
# $Revision: 15.24 $ : $Date: 92/07/09 13:57:12 $ : $Author: myers $
# ======================================================================*
# This is the Makefile for the TeXsis physics format. See the README
# file for more details about TeXsis. For information about
# installation on non-Unix machines run the file Install.tex through
# plain TeX.
#
# To make a preloaded format for texsis simply give the command
#
# make texsis
#
# To make a copy of the manual say
#
# make Manual
#
# If you are installing TeXsis on your system then you can have
# things automatically installed in the right places by editing
# the paramters below and then saying:
#
# make install
#
# (To install things in the system directories you must be the superuser.)
#
# This file is a part ot TeXsis.
# Copyright (C) 1990, 1991 by Eric Myers and Frank Paige.
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
# =====================================================================*
.SUFFIXES: .tex .doc .txs
# TEXSISDIR is where the TeXsis sources live. 'make install' will
# put them there. The source files and manual are supposed
# to be available for people to copy, so these should be out in
# the open. Suggested place is /usr/local/lib/tex/texsis or similar
#TEXSISDIR=$(HOME)/tex/texsis # for personal installation
TEXSISDIR=/usr/local/lib/tex/texsis
# TEXSISFORMAT is the directory where 'make install' will put the
# texsis.fmt. This is usually /usr/local/lib/tex/formats unless
# your TeX looks somewhere else for format files.
#TEXSISFORMAT=$(TEXSISDIR) # personal installation
TEXSISFORMAT=/usr/local/lib/tex/formats
# TEXSISINPUTS is the directory where 'make install' will put the
# style files and patch files so that TeXsis will find them.
# This is usually /usr/local/lib/tex/inputs unless your TeX
# looks somewhere else for input files. Sometimes older versions of
# TeX call the directory 'macros' rather than 'inputs'.
#TEXSISINPUTS=$(TEXSISDIR) # personal installation
#TEXSISINPUTS=/usr/local/lib/tex/macros # old variation
TEXSISINPUTS=/usr/local/lib/tex/inputs
# VIRTEX is the full path name of the virtex command on your system.
# TeX 3.0 uses the name it is called by as the format to load, so
# 'make install' makes a link to virtex called texsis.
VIRTEX=/usr/local/bin/virtex
# BINDIR is the directory where your executables are kept, and in
# particular where to put the texsis command (which is a link to
# $(VIRTEX) above. For personal installation you can use
#BINDIR=$(HOME)/bin # for personal installation
# For system installation this is usally /usr/local/bin.
BINDIR=/usr/local/bin
# MANDIR is where to put the texsis manual page. This is
# usually /usr/man/man1 or /usr/local/man/man1, depending
# on how you take care of your man pages. This is just the Unix man
# page, not the full TeXsis manual.
#MANDIR=$(HOME)/man/man1 # personal man pages, if you have them
MANDIR=/usr/local/man/man1
# INSTALL is the command used by 'make install' to put the
# format and manual pages in place. This can be /bin/cp or /bin/mv,
# as you choose, or you can get fancy and use /bin/install.
#INSTALL=/bin/mv
INSTALL=/bin/cp
# (End of installation parameters. Don't monkey with the stuff below.)
# =====================================================================*
# What follows describes how to make the texsis format file and the
# manual and how to install this stuff on the system
#
.SILENT: # let's hide the magic...
# VERSION is the current version number.
VERSION=2.15
# SGI's need to be told explicitly to use the Bourne shell:
SHELL=/bin/sh
# the default target is to make both the format and the manual
all: texsis Manual cover
texsis: texsis.fmt
Manual: Manual.dvi cover
manual: Manual.dvi
cover: TXScover.dvi
mv TXScover.dvi cover.dvi
# TeXsis source files:
TEXSIS= texsis.tex TXSfonts.tex TXSinit.tex TXSmacs.tex TXSprns.tex \
TXSeqns.tex TXSrefs.tex TXSsects.tex TXStags.tex TXStitle.tex \
TXSenvmt.tex TXSfigs.tex TXSfmts.tex TXSdcol.tex TXSletr.tex \
TXSform.tex TXSmemo.tex TXSconts.tex TXSsymb.tex \
TXSruled.tex TXShead.tex
# how to make the texsis.fmt format file from the sources:
texsis.fmt: $(TEXSIS)
initex \&plain texsis '\dump'
# There may be more style files than these at your installation,
# but these are the ones that come with the current TeXsis distribution,
# and we want to be sure we get all of them out of RCS and have them
# around for the install or making the distribution.
STYLES= AIP.txs CVformat.txs Elsevier.txs IEEE.txs WorldSci.txs \
nuclproc.txs PhysRev.txs epsf.tex index.tex Tablebody.txs \
thesis.txs
# TeXsis manual:
MANUAL= Manual.tex TXSdoc.doc TXSdocM.doc TXSdocR.doc TXSdoc0.doc \
TXSintro.doc TXSfonts.doc TXSeqns.doc TXSprns.doc TXSsymb.doc \
TXSrefs.doc TXSenvmt.doc TXSfigs.doc TXSruled.doc \
TXSsects.doc TXSfmts.doc TXSletr.doc TXSdcol.doc TXStags.doc \
TXSmisc.doc TXSinstl.doc TXSapxF.doc TXSrevs.doc TXSend.doc \
TXScover.doc
Manual.dvi: $(MANUAL) texsis.fmt
if [ -s Manual.aux ]; then \
echo "% Manual.aux exists. Making a single pass..." ;\
else \
echo "% First pass to create Manual.aux file..." ;\
tex \&texsis Manual ;\
echo "% Second pass..." ;\
fi
time tex \&texsis Manual
# Cover for a 3-ring binder or similar:
TXScover.dvi: TXScover.doc
tex \&texsis TXScover.doc
# 'make install' not only copies the files to where they should
# be but also creates a link named texsis to the executable virtex.
# This is because TeX 3.0 looks at the name it is invoked by
# and tries to load a format file by that name. If you have a version
# older than 3.0 you may want to make an undump'd version of TeXsis
# instead. See the TeX distribution for info about undump.
install: texsis.fmt Manual.dvi $(TEXSIS) $(MANUAL) texsis.1 $(STYLES)
if [ ! -d $(TEXSISFORMAT) ]; then \
/bin/mkdir -p $(TEXSISFORMAT); fi
$(INSTALL) texsis.fmt $(TEXSISFORMAT)
if [ ! -d $(TEXSISINPUTS) ]; then \
/bin/mkdir -p $(TEXSISINPUTS); fi
if [ -f $(TEXSISINPUTS)/TXSpatch.tex ]; then \
/bin/mv $(TEXSISINPUTS)/TXSpatch.tex TXSpatch.old ; fi
-/bin/rm -f $(BINDIR)/texsis
/bin/ln -s $(VIRTEX) $(BINDIR)/texsis
for name in $(STYLES) ; do \
$(INSTALL) $$name $(TEXSISINPUTS) ; \
done
if [ -f TXSpatch.tex ]; then \
$(INSTALL) TXSpatch.tex $(TEXSISINPUTS) ; fi
if [ ! -d $(TEXSISDIR) ]; then \
/bin/mkdir -p $(TEXSISDIR); fi
for name in $(TEXSIS) ; do \
$(INSTALL) $$name $(TEXSISDIR) ; \
done
for name in $(MANUAL) ; do \
$(INSTALL) $$name $(TEXSISDIR) ; \
done
if [ -f TXSsite.tex ]; then $(INSTALL) TXSsite.tex $(TEXSISDIR) ; fi
$(INSTALL) Manual.dvi $(TEXSISDIR)
if [ -d $(MANDIR) ]; then $(INSTALL) texsis.1 $(MANDIR); fi
echo "TeXsis $(VERSION) installed."
# 'make Install' instead uses Plain TeX to print the installation
# instructions from the appendix of the Manual
Install: Install.dvi
Install.dvi: Install.tex TXSmacs TXSenvmt TXSdocM.doc
tex Install
echo "Created Install.dvi -- print this for the instructions."
# (end of installation instructions)
# =====================================================================*
# DISTRIBUTION:
#
# The following are instructions for making the distribution files
# for propagating TeXsis to other sites. You probably don't need
# to worry about this stuff.
#
# The targets 'UNIX' and 'VMS' create a collection of shar bundles
# for distributing TeXsis to other sites. The list of files to pack
# is in the file MANIFEST, the instructions on how to pack are in
# bundle and vms_bundle. These require that you have the makekit
# program!
UNIX: bundle MANIFEST $(TEXSIS) $(MANUAL) Install.tex texsis.1
bundle
touch .Unix.bundled
VMS: vms_bundle MANIFEST .Unix.bundled
vms_bundle
touch .VMS.bundled
# The target 'tar' creates the compressed tar archive of the TeXsis
# distribution.
TARNAME=TeXsis-$(VERSION)
TARFLAGS=cof # the -o is to suppress chown/chgrp info
tardir: $(TARNAME)
$(TARNAME): UNIX unbundle
if [ ! -d $(TARNAME) ] ; then /bin/mkdir $(TARNAME) ; fi
/bin/cp TEXSIS?? $(TARNAME)
/bin/cp unbundle $(TARNAME) ; chmod +x $(TARNAME)/unbundle
( cd $(TARNAME) ; unbundle -c ; /bin/rm TEXSIS?? )
tar: $(TARNAME)
echo "building tar archive..."
/bin/tar $(TARFLAGS) $(TARNAME).tar $(TARNAME)
# echo "compessing the tar file..."
# compress $(TARNAME).tar
cleantar:
/bin/rm -r $(TARNAME)
#
# mtexsis: mTeXsis is a mini TeXsis for e-prints
#
MTEXSIS = TXSfonts.tex TXSinit.tex TXSmacs.tex TXShead.tex TXSeqns.tex \
TXSprns.tex TXSrefs.tex TXSsects.tex TXStags.tex TXStitle.tex \
TXSenvmt.tex TXSfmts.tex TXSfigs.tex TXSruled.tex TXSsymb.tex
mtexsis: mtexsis.tex
mtexsis.tex : mtexsis.pre $(MTEXSIS) mtexsis.post
cat mtexsis.pre > mtexsis.tex
for name in $(MTEXSIS) ; do \
./strip $$name >> mtexsis.tex ; \
done
cat mtexsis.post >> mtexsis.tex
# The processed index file Manual.ind is made using the makeindex
# program, which the user may not have. Hence we make it for the
# distribution.
Manual.ind: Manual.idx
makeindex Manual.idx
# ---------- diff patch file from previous version, using `patch`
OLD=2.14
NEW=2.15
PATCHFILE=diff-$(OLD)-$(NEW)
patchfile:
-diff -rc2 TeXsis-$(OLD) TeXsis-$(NEW) > $(PATCHFILE)
grep "^Only" $(PATCHFILE)
# (end of distribution)
#======================================================================*
# RCS: target to get fresh copy of code out of RCS
GET=maxco # how to checkout from RCS
RCS: check-out
check-out: get-Source get-Manual
get-Source:
for name in $(TEXSIS) ; do \
$(GET) $$name ; \
done
get-Manual:
for name in $(MANUAL) ; do \
$(GET) $$name ; \
done
#======================================================================*
# preview: target for previewing manual on Sun Workstation
# This mostly useful while I'm working on it. The tex-previewer
# command has to be defined locally on your machine.
preview: Manual.dvi
echo "previewing with texsun..."
-texsun -l 1 -autoReload Manual.dvi
#======================================================================*
# clean up a bit
clean:
/bin/rm -f *.log
/bin/rm -f Manual.ref
/bin/rm -f Manual.cnt
/bin/rm -f Manual.tbl
/bin/rm -f Manual.fgl
#>>> EOF Makefile <<<
$! =========== TXSform.tex ============
$ copy sys$input TXSform.tex
% file: TXSform.tex TeXsis version 2.15
% $Revision: 15.3 $ : $Date: 92/06/23 19:33:23 $ : $Author: myers $
%======================================================================*
% FORM LETTERS E. Myers and F.E. Paige
%
% Macros to type form letters with a common text to a list of
% people. The syntax is:
%
% \formletters{<letterhead-stuff>}{<text-file-name>}
% \BL Prof. John Doe
% Physics Dept
% U. of Nowhere
% Nowhere, Somewhere 12345679
% \V\Whoever{Prof.~Doe}
% \EL
% \BL Dr.\ William Barcode
% Department of Physics
% Ferbelab
% Batcave, IL 60510 USA
% \V\Whoever{Dr.\ Barcode}
% \EL
% \BL ...
% ... \EL
% ...
% \bye
%
% where <letterhead-stuff> is stuff to be executed before the address is
% printed and <text-file-name> is the name of a file containing the
% generic text of the letter following the standard TeXsis letter format,
% beginning with \body:
%
% \body
% Dear \Whoever,
% ...
% \closing
% Sincerely yours,
% Joe User
% \endletter
%
% The text file can use any other control sequences defined by
% \V\name{...} between \BL and \EL.
%
%-----------------------------------------------------------------------
\message{Form Letters.}
% \formletters{<letterhead>}{<file>} sets things up to make a series of
% form letters. The commands in <letterhead> are executed before the
% address, to make a letterhead or print the sender's phone number.
% The file named by <file> contains the text of the letter, which is
% printed below the address. This text can use any ``variable'' control
% sequences defined by \V in the address list.
\def\formletters#1#2{% %
\def\formlabels{\relax}% % disable \formlables
\def\formletterhead{#1}% % save letterhead definitions
\def\TXTfile{#2}% % save file name for letter text
\auxswitchfalse % no .AUX file
\refswitchfalse % no references either
\texsis % initialize TeXsis
\def\BL{\BLletter}% % \BL starts form letter
\def\FL{\BLletter}% % \FL is synonym for \BL
\def\EL{\ELletter}% % \EL ends form letter
\def\ELBL{\ELletter\BLletter}%
\def\IL{\ILletter}% %
\def\ELIL{\ELletter\ILletter}%
\def\endmode{\relax}% % initially does nothing
\let\V=\gdef % \V\name defines variable \name
\def\endletter{\endmode}% % \endletter does not end job
\def\endmode{\relax}% % start with null \endmode
\def\endform{\relax}% % ending is just \bye
\LetterFormat % and set up for letters
}
% \BLletter is \BL for letters. It begins a new formletter.
\long\def\BLletter{% do an individual form letter
\endmode % end any previous mode
\def\endmode{\relax}% % but ending this mode is nothing
\pageno=1 % start each letter on page 1
\formletterhead % do the letterhead stuff first
\begingroup\obeylines % to look for line endings in addresses
\GetFormAddress} % and go get address
% \GetFormAddress gets the address for form letters
{\obeylines % look for line end to mark #1
\gdef\GetFormAddress#1
{\ifx\EL#1\relax\endgroup\else % if just \EL then end \obeylines
\gdef\addressee{#1}% % addressee is first line of address
\global\advance \FLcount by 1 % advance count of letters printed
\emsg{\the\FLcount.\space \addressee\space}% show letters printed
\def\BL{\emsg{> . . . . . . . Warning! \NX\BL found before \NX\EL}\ELBL}%
\def\IL{\emsg{> . . . . . . . Warning! \NX\IL found before \NX\EL}\ELIL}%
\global\setbox\theaddress=\vbox\bgroup% start a vbox
\parindent=0pt % no indent, since we are \obeylines
#1\relax
\fi}%
}% end of \obeylines for definition
% \ELletter is \EL for letters. It boxes up the address and prints
% it, then reads in the generic text of the letter from \TXTfile
\def\ELletter{% end of address, print the form letter
\vss\egroup % end the \vbox
\endgroup % end the \obeylines
\copy\theaddress % dump the address to the page
\message{\space\space}% % some whitespace in log file
\input\TXTfile \relax % read in text of letter from file
\vfill\eject} % end the page
% \IL ignores a letter (use in place of \BL to keep from sending
% to a particular name on the list). You MUST end the entry in the
% list with \EL !
\long\def\ILletter#1\EL{\relax}
\long\def\ILlabel#1\EL{\relax}
%----------------------------------------------------------------------
\message{FormLabels.}
% \formlabels uses the same input file as \formletters but prints
% mailing labels. It is assumed that there are three columns of labels
% on a page. Dimensions are for 8 labels per column and Barbara's printer.
\newdimen\fullHsize \fullHsize=8.5in % hsize for label page
\newdimen\fullVsize \fullVsize=11.50in % vsize for label page
\newdimen\lblHsize \lblHsize=2.833in % width of standard label
\newdimen\lblVsize \lblVsize=1.365in % ht. of std. label - a bit
\newdimen\lblVoffset \lblVoffset=-.900in % vertical starting position
\newdimen\lblHoffset \lblHoffset=-0.750in % horizontal starting position
\newcount\FLcount % count the number of letters
\newbox\lblLcol % box for left column
\newbox\lblMcol % box for middle column
\def\formlabels{% % form labels instead of letters
\def\formletters##1##2{\relax}% % disable \formletters
\auxswitchfalse % no .AUX file
\refswitchfalse % no references either
\texsis % initialize TeXsis
\tenpoint\singlespaced % 10pt to fit long addresses
\nopagenumbers % suppress page numbering
\raggedbottom % ragged page bottom
\hoffset=\lblHoffset % use full page, no left margin
\voffset=\lblVoffset % adjust for printer vertical offset
\hsize=\fullHsize % use full page width
\vsize=\fullVsize % and full length
\def\lblflag{L}% % set flag to start in left column
\def\BL{\BLlabel}% % define \BL for labels
\def\FL{\BLlabel}% % synonym is \FL
\def\EL{\ELlabel}% % define \EL to end label
\def\ELBL{\ELlabel\BLlabel}% %
\def\IL{\ILlabel}% %
\def\ELIL{\ELlabel\ILlabel}% %
\def\endmode{\relax}% % initially does nothing
\def\endform{\endformlabels}% % end form labels
\let\V=\gdef % \V\name defines variable \name
}
\def\BLlabel{\begingroup\obeylines % pay attention to line endings
\hsize=\lblHsize % with width of label
\GetLabelAddress}% % get address in a box
% \GetLabelAddress gets the address for form labels
{\obeylines % look for line end to mark #1
\gdef\GetLabelAddress#1
{\ifx\EL#1\relax\endgroup\else % if just \EL end \obeylines
\gdef\addressee{#1}% % addressee is first line of address
\global\advance \FLcount by 1 % advance count of letters
\emsg{\the\FLcount.\space \addressee\space}% show letters printed
\def\BL{\emsg{> . . . . . . . Warning! \NX\BL found before \NX\EL}\ELBL}%
\def\IL{\emsg{> . . . . . . . Warning! \NX\IL found before \NX\EL}\ELIL}%
\global\setbox\theaddress=\vbox to \lblVsize\bgroup% start a vbox
\hsize=\lblHsize % with width of label
\parindent=0pt % no indent, since we are \obeylines
#1
\fi}%
}% end of \obeylines for definition
% \ELlabel ends the address label, with the address stored in box
% \theaddress. If we are in the left or centre column we then
% store the address in other boxes. If we are in the right column
% then we print all three boxes across the line.
\def\ELlabel{\vss\egroup % end the \vbox
\endgroup % done with \obeylines
\if L\lblflag % if in left column
\global\setbox\lblLcol=\box\theaddress % store in \lblLcol
\gdef\lblflag{M}% % next column is middle column
\else \if M\lblflag % else if middle column
\global\setbox\lblMcol=\box\theaddress % store in \lblMcol
\gdef\lblflag{R}% % next column is right column
\else % else right column, so
\line{\box\lblLcol % print all 3 boxes
\box\lblMcol % across the
\box\theaddress\hss}% % page...
\gdef\lblflag{L}% % reset to left column
\fi\fi % end of if's
}%
% \endform=\endformlabels ends the form labels gracefully. \lblflag is
% set to the next column, so...
\def\endformlabels{% %
\if M\lblflag% % last address in left
\line{\box\lblLcol\hss}% % only left box
\else \if R\lblflag% % last address in middle
\line{\box\lblLcol\box\lblMcol\hss}% left and middle boxes
\fi\fi}% % else printed by \EL
%>>> EOF TXSform.tex <<<
$! =========== TXSinit.tex ============
$ copy sys$input TXSinit.tex
% TXSinit.tex TeXsis version 2.15
% $Revision: 15.3 $ : $Date: 92/05/31 20:59:21 $ : $Author: myers $
%======================================================================*
% TXSinit - Initialization for TeXsis - This file is a part of TeXsis
% (C) copyright 1991 by Eric Myers and Frank Paige
%
% Make @ signs act like letters, temporarily, to avoid conflict
% between user names and internal control sequences of plain format.
% \inittexsis changes this back at run time
\message{Initialization.}
\catcode`@=11
% Philosophy: unlike formats like LaTeX, you should never create a macro
% with the same name as one found in the TeXbook, unless you are sure that
% it will behave the way the TeXbook says it does. You can extend it,
% but don't change the meaning. That way the user can always go back to
% "plain" TeX to do strange or complicated things.
% Plain defines a bunch of constants which improve TeX's speed and
% space utilization; the ones we use are:
% \z@ = 0 or 0pt, \p@ = 1pt (or just pt), \@ne = 1, \@M=10000
% set some integer parameters:
\uchyph\@ne % allow capitalized words to be split
\brokenpenalty\@M % don't break hyphens across pages
\widowpenalty\@M % penalize for widowing lines
\clubpenalty\@M % penalize for club lines (break after first line
% in paragraph)
% Counters - (Moved to the packages that use them!)
% Rule is: The counter should hold the value for the most recent usage
% (this is so we can refer to it later without having to subtract one
% from it. It also allows us a way to determine if a given counter has
% been used; for example, if any \subsections have appeared in the current
% section then the count will be non-zero)
% I/O ALLOCATION: all packages do their own I/O allocation when \Input'ed.
% These are used by \texsis to read mods or patches
\newread\patchfile % input for run-time patches to TeXsis
\newread\modfile % input for run-time local modifications to TeXsis
%==================================================*
% Run time Initialization for opening files and such is now
% performed by the macros that use those files. \texsis just
% sets up the TeXsis defaults, instead of the Plain TeX defaults.
% This replaces \inittexsis, which is still okay to use. (For now.)
\long\def\texsis{%
\quoteon % automatic quote balancing is ON
\autoparens % automatic paren balancing is ON
\ATlock % now @ is no longer a letter
\pageno=1 % be sure to start on page one
\colwidth=\hsize % column width assumed \hsize
\headline={\HeadLine}\headlineoffset=0.5cm % TeXsis running headlines
\footline={\FootLine}\footlineoffset=0.5cm % and footlines
\twelvepoint % start in 12 pt type
\doublespaced % and doublespaced
\SetDate % initialize the dates
\newlinechar=`\^^M % <CR> breaks lines in file output
\overfullrule=0pt % don't mark overfull \hbox`s
}
\def\inittexsis{\texsis} % synonym (2.11 and before)
\def\texsisinit{\texsis} % synonym
\def\initexsis{\texsis} % synonym
\def\initTeXsis{\texsis} % synonym
% set the dates to today's date. \adate=American, \edate=European
\def\SetDate{\relax
\xdef\adate{\monthname{\the\month}~\number\day, \number\year}%
\xdef\edate{\number\day~\monthname{\the\month} \number\year}%
}
%=====================================================================
% \ReadPatches looks to see if there is a patch file out there called
% \TXSpatches. If it is, read it in. Should be run-time system
% updates and patches and such. This use to be called by \texsis,
% but is now inclued in \everyjob.
% [Porting Note! On non-VMS machines change the \openin's below.
% on a VAX/VMS they have to be done with ".TEX"]
\def\ReadPatches{\relax
\immediate\openin\patchfile=\TXSpatches.tex % try to open patch file
\ifeof\patchfile % is it EOF? Then it isn't there
\closein\patchfile % so just close it.
%%%% \message{No patch file \TXSpatches\space found.}%%
\else\immediate\closein\patchfile % close it so to read with \Input
\Input\TXSpatches.tex \relax % \Input the patches
\fi
% See if there is a modifications file out there called \TXSmods. If it is,
% read it in. Should be personal modifications to macros and such.
% [see note above for non-Vax machines.]
\immediate\openin\modfile=\TXSmods.tex \relax % try to open mod file
\ifeof\modfile % is it EOF? Then not there
\closein\modfile % so just close it.
\else\immediate\closein\modfile % close it to read with \Input
\Input\TXSmods.tex \relax % \Input the mod file
\fi
}
%======================================================================*
% LOADED and AUTOLOADED styles:
%
% Special document layouts can be loaded from a ``style'' file as needed.
% To load a particluar layout called \foo from the file foobar.txs use:
%
% \loadstyle\foo{foobar.txs}
%
% (This is similar to \documentstyle in LaTeX, but we consider that
% to be a reserved word for LaTeX.) By convention TeXsis style files
% end with ``.txs'' to distinguish them from LaTeX style files.
%
% Note 1: The style file foobar.txs must be readable at run time,
% either from the current directory, in one of the directories
% where your particular version of TeX looks for the \input command.
%
% Note 2: The control sequence \foo must be redefined in the style
% file, since the new version of \foo is invoked after the file is
% loaded. If it is not redefined we avoid the potential infinite loop
% and instead post an error message.
\newread\txsfile % to read style files
\def\loadstyle#1#2{% % load a definition for #1 from file #2
\def#1{\@loaderr{#1}}% % disable #1 (just in case...)
\ATunlock % make @ a letter, in case it's in the file
\immediate\openin\txsfile=#2 % try to open the file
\ifeof\txsfile % if end of file, then
\emsg{> Can't find the file #2}% #1 below will be \@loaderr
\closein\txsfile % just close the file
\else % file exists in path, so...
\closein\txsfile % close it to read it
\input #2 \relax % load the file with new \def
\fi % end of \ifeof
\ATlock % @ now no longer a letter
#1} % now use the new definitions
% It's an error if the macro #1 was not redefined in the style file:
% [if we didn't change the definition of #1 to something else we
% would just keep reading the (non-existent) file over and over.]
\newhelp\@utohelp{%
loadstyle: The macro named above was supposed to be defined^^J%
In the style file that was just read, but I couldn't find^^J%
the new definition in that file. Maybe you can learn something^^J%
from the comments in that style file, or find someone who knows^^J%
something about it.}
\def\@loaderr#1{% longer help message for \loadstyle error
\newlinechar=10 % ^^J is line break
\errhelp=\@utohelp % longer help message
\errmessage{No definition of \string#1 in the style file.}}
% AUTOLOAD:
% Many of the most basic special document layouts are kept in
% style files, but we don't want the user to have to know which
% file is which. Hence we use \autoload to tell it to automatically
% load the true definition from the style file if the layout
% (or something from inside it) is called for.
% \autoload\foo{file} defines \foo so that it's full definition
% is read from the named file when \foo is invoked.
\def\autoload#1#2{% automatically load a definition from a file
\def#1{\loadstyle#1{#2}}}
% List of autoloaded document styles:
\autoload\nuclproc{nuclproc.txs} % Nuclear Physics proceedings
\autoload\NorthHolland{Elsevier.txs} % North-Holland single column
\autoload\NorthHollandTwo{Elsevier.txs} % North-Holland double column
\autoload\WorldScientific{WorldSci.txs} % World-Scientific proceedings
\autoload\IEEEproceedings{IEEE.txs} % IEEE conference proceedings
\autoload\IEEEreduced{IEEE.txs} % 75% reduced IEEE proceedings
\autoload\AIPproceedings{AIP.txs} % American Institute of Physics
\autoload\CVformat{CVformat.txs} % sample macros for Curriculum Vitae
\autoload\PhysRev{PhysRev.txs} % Physical Review 2-column layout
% Indexing macros using MakeIndex are loaded from index.tex
\autoload\markindexfalse{index.tex}\autoload\markindextrue{index.tex}
\autoload\makeindexfalse{index.tex}\autoload\makeindextrue{index.tex}
\autoload\idx{index.tex}\autoload\index{index.tex}\autoload\theindex{index.tex}
% Other styles which you want to be automatically loaded can
% defined in the local customization file TXSsite.tex
% For other basic document styles which are not loaded from style files see
% TXSfmts.tex.
%>>> EOF TXSinit.tex <<<
$! =========== TXSletr.tex ============
$ copy sys$input TXSletr.tex
% file: TXSletr.tex TeXsis version 2.15
% $Revision: 15.2 $ : $Date: 92/06/18 13:15:13 $ : $Author: paige $
%======================================================================*
% LETTER FORMAT E. Myers and F.E. Paige
%
% Format for typing simple business letters. Taken almost verbatim
% from The TeXbook, but modified to be a TeXsis "layout".
%
%-----------------------------------------------------------------------
% The following format is appropriate for use with TeXsis and BNL
% stationary. It can easily be adopted for other stationary or even for
% use outside of TeXsis; simply replace the \letter command with the
% proper initialization followed by \LetterFormat and use \letterhead or
% \phoneletterhead.
%
% \letter % initialize TeXsis and letter format
% \letterhead{xxxx} % xxxx is BNL extension
% \address % get address in box
% <name and address> % line endings are respected
% \body % begin text of letter
% Dear whoever,
%
% <text of your letter>
%
% \closing % begin closing
% Sincerely yours, % or whatever, indented
% Your Name % indented, followed by a space
% Your Title % optional additional line(s)
% \annotations % initials, enclosures, etc.
% <text> % can also use \ps
% \cc <name> % carbon copies
% <name> % to more than one person
% \bye % end of letter
%
% -----------------------------------------------------------------------
\message{Letter Format.}
% dimensions, counters, and boxes: \hdimphone and \vdimphone are the
% positions relative to the page edge -- not the print boundaries -- of the
% telephone number in \phoneletterhead. They are correct here for BNL
% stationary. Similarly, \hdimdate and \vdimdate are the positions for the
% date. These can be changed in TXSsite.tex to fit other stationary with
% a generally similar format.
\newdimen\headlineoffset \headlineoffset = 0.25 truein
\newdimen\longindent \longindent = 3.5 truein
\newdimen\hdimphone \hdimphone = 6.2truein
\newdimen\vdimphone \vdimphone = 1.9truein
\newdimen\hdimdate \hdimdate = 5.5truein
\newdimen\vdimdate \vdimdate = 2.15truein
\newskip\bigletterskip
\bigletterskip=1.0truein plus 1.0truein minus .75truein
\newbox\theaddress % to collect the address in
% -----------------------------------------------------------------------
% Initialization. \LetterFormat is called by \letter but can also be
% called separately.
\def\LetterFormat{% %
\nopagenumbers % kill page numbers
\singlespaced % letters always begin \singlespaced
\quoteon % automatic open/close quotes
\longindent=3.5truein % indentation for signature
\headline={\LetterHeadline}% % running headline has addressee
\let\endmode=\par % start with this for \endmode
\let\body=\letterbody % \body begins text of letter
\let\text=\letterbody % \text is synonym
\let\date=\letterdate % \date puts date on top of letter
\let\cc=\ccletr % carbon copy for letter
\def\addressee{\relax}% % start with no addressee
}
\def\Letter{% document format for letters
\ContentsSwitchfalse % no table of contents
\refswitchfalse % no reference list
\auxswitchfalse % no forward references
\texsis % initialize
\singlespaced % single space default
\LetterFormat} % Setup using \LetterFormat
\def\letter{\Letter} % synonym
\def\LetterHeadline{% % headline for extra pages
\ifnum\pageno>1 % headline placement and spacing
\ifx\addressee\relax\relax % no addressee, so
{\tenrm\today\hfil Page \folio}% date and page
\else % otherwise addressee, date, page
{\tenrm\addressee\hfil\today\hfil Page \folio}%
\fi
\else\hfil\fi} % but nothing on page 1
% \LetterWidth adjusts the width of the letter to allow long or
% short letters to be fit nicely on the page.
\def\LetterWidth#1{% % set width for letter
\hsize=#1 % set \hsize
\dimen0=#1 % calculate horizontal shift ...
\advance \dimen0 by -6.5truein % subtract default
\divide \dimen0 by 2 %
\advance \hoffset by -\dimen0 % center letter
\advance \longindent by \dimen0 % adjust closing
}
\def\letterwidth{\LetterWidth} % synonym
\def\endletter{%\obsolete\endletter\bye %
\endmode\vfil\eject\end} % to end a letter
%-----------------------------------------------------------------------
% \today gives today's date. This is redundant in TeXsis but is
% included for completeness.
\def\today{\number\day\
\ifcase\month\or
January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or December\fi\
\number\year}
%-----------------------------------------------------------------------
% \beginlinemode ends the previous mode and starts a mode where
% \obeylines is in effect.
\def\beginlinemode{\endmode\begingroup\parindent=0pt\parskip=0pt
\obeylines\def\endmode{\par\endgroup}}
% \beginparmode ends the previous mode and starts a mode where lines
% are concatenated.
\def\beginparmode{\endmode\begingroup\parskip=\medskipamount
\def\endmode{\par\endgroup}}
%-----------------------------------------------------------------------
% \address gets the address in a box, as well as printing it at the
% top of the letter. Line endings are respected here. The first line after
% \address is the \addressee, which is used in the heading on all pages
% after the first.
\def\address{% %
\vskip\bigletterskip % skip down for address
\beginlinemode % look for line ends in address
\getaddress} % and get address
{\obeylines\gdef\getaddress #1
#2
{#1\gdef\addressee{#2}%
\global\setbox\theaddress=\vbox\bgroup
%%%NOT \longindent \hsize=\longindent
\parskip=0pt
#2
\def\endmode{\egroup\endgroup \copy\theaddress}
}% end \gdef
}% end \obeylines for
%-----------------------------------------------------------------------
% Use \body before typing the body of the letter. This is defined
% to be \letterbody. \text is a synonym.
\def\letterbody{\bigskip % skip some
\beginparmode % paragraph mode
\raggedright\tolerance=2500 % letters are not justified
\noindent} % don't indent salutation
% Use \closing at the end of the letter. It automatically puts a
% space for a signature between the 1st and 2nd lines after \closing.
\def\closing{\beginlinemode\getclosing}
{\obeylines\gdef\getclosing #1
#2
{#1\nobreak\bigskip\nobreak\bigskip \leftskip=\longindent #2
\nobreak\vskip .5truein
\def
{\endgraf\nobreak}}}
% \annotations and \ps are used at the end of the letter. \annotations
% respects lines while \ps gives paragraph mode.
\def\annotations{\beginlinemode\nobreak\bigskip % skip down some
\def\par{\endgraf\nobreak}\obeylines\par}
\def\ps{\beginparmode\nobreak\bigskip % skip down some
\interlinepenalty 5000\def\par{\endgraf\penalty 5000}}
% \ccletr does \cc for a letter.
\def\ccletr{\beginlinemode%
\nobreak \bigskip% % skip down
\def\par{\endgraf\nobreak}% % as for \annotations
\obeylines\par% % obey lines
\ccitem{cc:\ }} % print cc:
\def\cc{\ccletr}
\def\CC{\cc}
\def\Encl{\beginlinemode%
\nobreak \bigskip% % skip down
\def\par{\endgraf\nobreak}% % as for \annotations
\obeylines\par% % obey lines
\ccitem{Encl:\ }} % print cc:
\def\encl{\Encl} % synonym
% \ccitem does the work for \cc and \Encl
\def\ccitem#1{\setbox0\hbox{#1\quad}% % box0 = argument
\parindent=\wd0 % get its width
\hang % hanging indentation
\rlap{\copy0}% % and write it
\nobreak% % forbid break
\vskip-\baselineskip\relax} % kill the skip
\def\newpage{\vfill\eject}
%-----------------------------------------------------------------------
% \letterhead just spaces down and puts the date at the top of the
% page. \phoneletterhead puts in a phone number and the date at positions
% given by \hdimphone, \vdimphone and \hdimdate, \vdimdate relative to
% the true page boundaries.
\def\letterhead#1{% %
\vbox{\vskip 0.5 truein}% % skip down for the date
\line{\hfil\today}% % right justify date
\vskip\bigletterskip}% % space down to the address
\def\phoneletterhead#1{% % #1 is phone number
\vbox{\vskip-\voffset\vskip-\headlineoffset % skip down to position
\vskip\vdimphone} % of phone number
\hbox{\hskip-\hoffset\hskip\hdimphone #1}% % skip over to number
\vskip-\vdimphone\vskip\vdimdate % skip down to date
\hbox{\hskip-\hoffset\hskip\hdimdate \today} % date
} %
\def\letterdate{% % \letterdate just puts date on letters
\vbox{\vskip 0.5 truein}% % skip down for the date
\line{\hfil\today}% % right justify date
\bigskip} % space down to the address
% >>> EOF TXSletr.tex <<<
$! =========== TXSprns.tex ============
$ copy sys$input TXSprns.tex
% file: TXSprns.tex TeXsis version 2.15
% $Revision: 15.1 $ : $Date: 92/05/31 21:06:14 $ : $Author: myers $
%======================================================================*
% Automatic parenthesis sizing:
%
% \autoparens provides automatic sizing of () and [] in displayed
% equations by making these active characters and inserting \left and
% \right as needed. Automatic sizing is NOT provided for other delimiters
% such as \{ \} -- these must be handled as in Plain TeX. This feature is
% turned on and off by:
% \autoparens ==> automatic sizing on
% \offparens ==> automatic sizing off
% The default is \autoparens once you say \texsis.
%
% While \onparens generally simplifies the typing of equations,
% it can cause problems which might not be expected. Since \autoparens uses
% \left ... \right internally, parentheses must be properly balanced.
% In particular, splitting parentheses by breaking a long equation with
% an \EQNalign will produce an error. Most problems can be solved by using
% control sequences for the plain characters:
% \lparen ==> (
% \rparen ==> )
% \lbrack ==> [
% \rbrack ==> ]
%
% You can still use \left and \right in equations with \autoparens,
% but they are implicitly inserted if you fortet them.
%
% In older versions of TeXsis we used \onparens to provide automatic
% parenthesis sizing everywhere. This caused some unexpected problems,
% so we have restricted \autoparens to displayed equations, where it
% is most usefful. \onparens is still around, but we don't encourage
% its use anymore. Still, we did fix this a little bit so that parens
% and brackets are only active in math mode.
%
% Dependencies: \emsg and \@errmark come from TXSmacs.TeX
%======================================================================*
\message{Auto-sizing of Parentheses.}
\catcode`@=11 % make sure @ is a letter here
% ---------- first save usual definitions of () and [] and \left and \right
\ifx\@left\undefined % if \@left undefined then do it
\let\@left=\left \let\@right=\right
\let\lparen=( \let\rparen=)
\let\lbrack=[ \let\rbrack=]
\let\@vert=\vert
\fi % else its already done
% ---------- Now make definition of () and [] for use when they are active
\begingroup %=== make these active catcodes local ===
\catcode`\(=\active \catcode`\)=\active
\catcode`\[=\active \catcode`\]=\active
\gdef({\relax % \relax just in case in an alignment
\ifmmode \push@delim{P}% % if math mode record opening delim
\@left\lparen % and do \left (
\else\lparen % else, just a left paren
\fi}
\global\let\@lparen=( % another name for it
\gdef){\relax % \relax in case in an alignment
\ifmmode\@right\rparen % if math mode then \right )
\pop@delim\@delim % get last opening delimiter
\if P\@delim \relax \else % check for miss-matched delimiters
\if B\@delim\emsg{> Expecting \string] but got \string).}%
\@errmark{PAREN}%
\else\emsg{> Unmatched \string).}\@errmark{PAREN}%
\fi\fi
\else\rparen % else just a ")"
\fi}
\gdef[{\relax % just in case in alignment
\ifmmode \push@delim{B}% % if math mode record opening delim
\@left\lbrack % and do \left [
\else\lbrack % else, just a left bracket
\fi}
\global\let\@lbrack=[ % another name for it
\gdef]{\relax % \relax in case in an alignment
\ifmmode\@right\rbrack % if math mode then \right ]
\pop@delim\@delim % get last opening delimeter
\if B\@delim \relax \else % check for mis-matched delimeters
\if P\@delim\emsg{> Expecting \string) but got \string].}%
\@errmark{BRACK}%
\else\emsg{> Unmatched \string].}\@errmark{BRACK}%
\fi\fi
\else\rbrack % else just a "]"
\fi}
% Make \left(, \right), \left[ and \right] work properly even if easyparens
% is on. To use these \let\left=\EZYleft and \let\right=\EZYright
\gdef\EZYleft{\futurelet\nexttok\@EZYleft} % \nexttok is next tok on list
\gdef\@EZYleft#1{% % look for ( or [
\ifx\nexttok( \let\nexttok=\lparen % replace ( with \lparen
\else
\ifx\nexttok[ \let\nexttok=\lbrack % replace [ with \lbrack
\fi\fi
\@left\nexttok} % do usual \left to \nexttok
\gdef\EZYright{\futurelet\nexttok\@EZYright} % \nexttok is next tok on list
\gdef\@EZYright#1{% % look for ) or ]
\ifx\nexttok) \let\nexttok=\rparen % replace ) with \rparen
\else
\ifx\nexttok] \let\nexttok=\rbrack % replace ] with \rbrack
\fi\fi
\@right\nexttok} % do usual \right to \nexttok
\endgroup %=== close () and [] as active characters ===
%--------------------------------*
% macros to push and pop delimeter marker on the stack called \@delimlist
\toksdef\@CAR=0 \toksdef\@CDR=2 % for push and pop delimeters
\def\push@delim#1{\@CAR={{#1}}% % add #1
\@CDR=\XA{\@delimlist}% % to front
\edef\@delimlist{\the\@CAR\the\@CDR}}% % of \@delimlist
\def\pop@delim#1{\XA\pop@delimlist\@delimlist\endlist#1}% pop from list to #1
\def\pop@delimlist#1#2\endlist#3{\def\@delimlist{#2}\def#3{#1}}
\def\@delimlist{} % start with null list
%==================================================*
% Turning EZparens on and off:
\newif\ifEZparens \EZparensfalse
\def\autoparens{\EZparenstrue % turn on the switch
\everydisplay={\@onParens}% % in displayed equations
}
\def\@onParens{% turn on paren-matching definitions and active characters
\ifEZparens % only if switched on
\def\@delimlist{}% % reset delim list to null
\let\left=\EZYleft % get \left([ correct
\let\right=\EZYright % similarly for \right's
\catcode`\(=\active \catcode`\)=\active % make ( and )
\catcode`\[=\active \catcode`\]=\active % and [ and ] active
\fi}
\def\offparens{% turn off automatic paren sizing
\EZparensfalse\@offParens % switch and active chars off
\everymath={}\everydisplay={}} % clear \every...
\def\@offParens{%
\let\left=\@left % restore \left and \right
\let\right=\@right % to original definitions
\catcode`(=12 \catcode`)=12 % make ( and )
\catcode`[=12 \catcode`]=12 % and [ and ] "other"
}
\offparens % default until \texsis
%======================================================================*
% \onparens (backward compatability, but to be removed soon)
%
% \onparens does automatic parenthesis sizing in both in-line
% and displayed equations. In-line equations are a bit difficult.
% When TeX gets a $ it has to look ahead at the next character to
% see if it is another $. If it was not then it puts it back in
% the input stream, but the character code is already set -- if it
% was ( or [ then you can't make these \catcode=\active. Thus in
% math mode (but not displayed equations) we have to look ahead
% at the token and take corrective action.
%
% Unfortunately if the first token is complex (i.e. enclosed in { }'s)
% then the lookahead ends up removing the { }'s, which can cause
% errors. Put \relax at the begining of such equations until I find
% a fix. Or use \autoparens instead.
\def\onparens{% OLD version of \autoparens for both math and displayed eqns
\EZparenstrue % turn on the switch
\everymath={\@onMathParens}% % in math mode
\everydisplay={\@onParens}% % in displayed equations
}
\def\easyparenson{\onparens} % OLD synonym
\def\@onMathParens#1{% check lookahead for a missed ( or [
\@SetRemainder#1\endlist % to put back lookahead
\ifx#1\lparen\let\@remainder=\@lparen\fi % lookahead for missed (
\ifx#1\lbrack\let\@remainder=\@lbrack\fi % and get rid of [ found
\@onParens % make ), (, ], [ active
\@remainder} % now do what followed
% \@SetRemainder looks at lookahead from \@onMathParens. If there
% is more than one token (#2 not empty) then the lookahead was a complex
% token so it should be enclosed in { }'s
\def\@SetRemainder#1#2\endlist{%
\ifx @#2@ \def\@remainder{#1}%
\else \def\@remainder{{#1#2}}%
\fi}
\def\easyparensoff{\offparens} % synonym for \offparens
% -- Redefine some PLAIN macros so that they will work with \easyparenson
\def\pmatrix#1{\@left\lparen\matrix{#1}\@right\rparen}
\def\bordermatrix#1{\begingroup \m@th
\setbox\z@\vbox{\def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}%
\ialign{$##$\hfil\kern2\p@\kern\p@renwd&\thinspace\hfil$##$\hfil
&&\quad\hfil$##$\hfil\crcr
\omit\strut\hfil\crcr\noalign{\kern-\baselineskip}%
#1\crcr\omit\strut\cr}}%
\setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}%
\setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}%
\setbox\tw@\hbox{$\kern\wd\@ne\kern-\p@renwd\@left\lparen\kern-\wd\@ne
\global\setbox\@ne\vbox{\box\@ne\kern2\p@}%
\vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right\rparen$}%
\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
% Partitioned matrix
% usage:
% \partitionmatrix{a&&b&&c\cr\tabelrule d&e&f\cr}
% (leave off the last \cr or you'll get an extre line at the bottom)
% (The \mathstrut tries to make two n-row partition matrices have the
% same height and depth unless some row is unusually large.)
\def\partitionmatrix#1{\,\vcenter{\offinterlineskip\m@th
\def\tablerule{\noalign{\hrule}}
\halign{\hfil\loosebox{$\mathstrut ##$}\hfil&&\quad\vrule##\quad&%
\hfil\loosebox{$##$}\hfil\crcr
#1\crcr}}\,}
% >>> EOF TXSprns.tex <<<
$! =========== TXSsects.doc ============
$ copy sys$input TXSsects.doc
% TXSsects.doc TeXsis version 2.15
% $Revision: 15.11 $ : $Date: 92/07/16 11:53:04 $ : $Author: paige $
%=======================================================================*
% TeXsis Manual - CHAPTERS AND SECTIONS : This file is a part of TeXsis
% (C) Copyright 1989, 1992 by Eric Myers and Frank E. Paige
%======================================================================*
\ifx\undefined\bs \texsis\input TXSdocM.doc\draft\fi
\section{Chapters and Sections \label{sect.sects}}
Long documents are typically divided into chapters, sections,
subsections, and/or appendices. The following macros can be used to
create and automatically number such divisions of a document:
\singlelinetrue % make label overhang
\description{\hskip 3cm}\clump
\itm{\CS{chapter}\arg{title}\quad}
Begins a chapter with \meta{title} printed in |\Tbf|
type on a new page.
\itm{\CS{section}\arg{title}\quad}
Begins a section with the \meta{title} printed in |\tbf|
type. This does {\it not} begin on a new page (although you
certainly can start a section on a new page by saying
|\vfill\supereject| first.)
\itm{\CS{subsection}\arg{title}\quad}
Begins a subsection with the \meta{title} printed in |\bf|
type.
\itm{\CS{subsubsection}\arg{title}\quad}
Begins a sub-subsection entitled \meta{title}. This is a lower
level than even a subsection and should only be used when truly appropriate.
\itm{\CS{Appendix}\arg{label}\arg{title}}
Begins a chapter-like appendix labeled by the letter \meta{label}
(generally A, B, C, \dots or I, II, III, \dots). The \meta{title}
is printed in |\Tbf| type at the top of a new page.
\itm{\CS{appendix}\arg{label}\arg{title}}
Begins a section-like appendix labeled by the letter \meta{label}
(generally A, B, C, \dots or I, II, III, \dots). The \meta{title}
is printed in |\tbf| type.
\itm{\CS{nosechead}\arg{title}}
The \meta{title} is typeset like a subsection headline, but without a
subsection number. This is suitable for acknowledgments, lists of
references and such.
\enddescription
The title appears at the top of the section or subsection, left
justified in the appropriate typestyle and with an appropriate amount of
vertical spacing below. In general |\chapter| is appropriate mainly for
books or theses; the manual you are reading now uses only |\section| and
|\subsection| divisions.
By default chapter, section, and subsection numbers are printed with
the titles, and the chapter and section numbers are also attached to
equation, figure and table
numbers in the form ``$cc.ss.nn$'', where $cc$ is the chapter
number, $ss$ the section number, and $nn$ the equation number. The
inclusion of the chapter and section numbers can be turned on or off with
the commands
\description{~showchaptIDfalse\qquad}
\itm{\CS{showchaptIDtrue}} Display chapter numbers.
\itm{\CS{showchaptIDfalse}} Do not display chapter numbers.
\itm{\CS{showsectIDtrue}} Display section numbers.
\itm{\CS{showsectIDfalse}} Do not display section numbers.
\enddescription
\CS{Appendix} and \CS{appendix} give, respectively, chapter-like
and section-like appendices. The title is printed in the same format as
a chapter or section, and the chapter or section number is replaced by a
letter given as the first argument. This letter is attached to the
equation numbers if \CS{showchaptIDtrue} or \CS{showsectIDtrue} is used.
You can omit the letter by using an empty first argument, as in
\TeXexample
\appendix{}{Leading logarithm approximation}
|endTeXexample
\noindent
in which case the result is the same as setting
\CS{showchaptIDfalse} or \CS{showsectIDfalse}.
A skip \CS{sectionskip} is used before the title of any
section-like division, that is, a |\section| or an |\appendix|; a skip
\CS{subsectionskip} is used for any lower-level divison, that is, a
|\subsection|, a |\subsubsection|, or a |\nosechead|. Of course these
are all removed by \TeX\ if the section starts on a new page.
Furthermore, any of these divisions will start on a new page if less
than a minimum length \CS{sectionminspace} remains on the current
page. The defaults for these parameters are
\TeXexample
\sectionskip=2cm plus8pt minus8pt
\subsectionskip=1cm plus4pt minus4pt
\sectionminspace=0.25\vsize
|endTeXexample
but they can be changed to any legal \TeX\ skip or dimension either
throughout the document or in a local group. For example, you could
use
\TeXexample
\begingroup
\subsectionskip=\sectionskip
\fourteenpoint
\nosechead{<title>}
\endgroup
|endTeXexample
to make a |\nosechead| which looks like a |\section|.
\bigskip
Ordinarily the order of appearance of the sections of a document
are not changed, so there is no automatic mechanism for labeling the
sections. Any of the divisions described above can be labeled by
inserting \cs{label}\arg{label} into the title text. The \meta{label}
should have the form \meta{type.name}, where \meta{type} is |chap|,
|sect|, etc., to avoid possible conflicts with other kinds of labels.
The corresponding numbers can then be referred to with
|\use{|\meta{type.name}|}|.
If the title of a chapter or section is too long a break in the
line can be inserted with \cs{n}. This will also break the line in the
title when it appears in the table of contents. If running headlines
are being used (see Section~\use{sect.headline}) then only the first
part of the title, up to the \cs{n}, will be used for the running
headline. You can always set the headline by hand with |\setHeadline|;
see Section~\use{sect.headline}.
You can customize the behavior of the section-making macros by
adding your own definitions for the macros
\index{customization!chapters and sections}%
\example
\CS{everychapter}, \CS{everysection}, \CS{everysubsection},
\CS{everysubsubsection},
\endexample
which are called immediately before making the corresponding
division of the document, or for
\example
|\afterchapter|, |\aftersection|, |\aftersubsection|,
|\aftersubsubsection|,
\endexample
which are called immediately afterwards. By default all of these macros
do nothing. As an example, if you wanted every section to begin on a
new page you could define:
\TeXexample
\def\everysection{\vfill\supereject}
|endTeXexample
\noindent
For more specialized customization one can look in the source file
|TXSsects.tex| for the definitions of \cs{section} and \cs{chapter}
and modify these accordingly.
%==================================================*
\pagecheck{0.30\vsize} % new page if this one full
\subsection{Table of Contents}
The section-making macros just described automatically make an entry in
a {table of contents} for the document being prepared. The title of
the chapter or section and the page number are stored in a table of
contents file (which ends with the extension ``|.toc|'') until needed.
The \idx{table of contents} is created simply by saying \CS{Contents}. If
your document is divided into chapters, like a book, the table of
contents should appear on a page with a Roman numeral page number (which
is obtained by setting \cs{pageno} to a negative value). For example:
\TeXexample
\book % initialize
\input ... % input chapter or section files
...
\vfill\supereject % eject last page, including figures
\nosechead{Contents} % label TOC without section #
\pageno=-3 % print on pages iii, iv, ...
\Contents % generate table of contents
|endTeXexample
\noindent
The table of contents should be printed at the {\it end} of the
document so that all the page numbers are correct. You then
simply move these pages to the front of the document.
Nothing is written to the table of contents file unless
\CS{ContentsSwitchtrue} is set. The default for most documents
is \CS{ContentsSwitchfalse}, since one usually does not want a table
of contents for a short paper or a memo or a letter. The exceptions
are \cs{book} and \cs{thesis}, which automatically set \CS{ContentsSwitchtrue}.
In any case, if you want a table of contents you can
explicitly state \CS{ContentsSwitchtrue}.
While an entry in the table of contents is created by \cs{chapter}
or \cs{section}, no entry is made for \cs{nosechead}. In this case, or in
any case, you can insert an entry into the table of contents ``by hand''
by saying
\example
\CS{addTOC}\arg{level}\arg{title}\arg{page}
\endexample
where \meta{level} is the level of division for the entry
being made, with 0 for chapters, 1 for sections and 2 for subsections.
This controls how much vertical space is put around the table of
contents entry and how much the entry is indented.
%
The \meta{title} is the text of the title as it should appear in the table
of contents. Text which is too long for one line will be split over
several lines, but you can force a line break where you want one with
\cs{n}. The \meta{page} is the page number for the entry you are making.
Generally you'll use \cs{folio} here to just use the current page number,
whatever that may be. Thus to make a section level
entry in the table of contents having the title ``Acknowledgments''
you would simply say
\TeXexample
\addTOC{1}{Acknowledgments}{\folio}
|endTeXexample
Entries made in the table of contents by \cs{chapter}, \cs{section},
etc. will optionally begin with the chapter or section number, depending
upon whether \cs{showchaptIDtrue} and \cs{showsectIDtrue} are selected. The
decision whether or not to show the chapter or section number is made
when the table of contents is created by \CS{Contents}, not when the
\cs{chapter} or \cs{section} is begun. Thus it is possible to have the
section numbers showing at the beginning of the section, but to then have
no section numbers in the table of contents by saying \cs{showsectIDfalse}
immediately before saying \CS{Contents}.
\bigskip
What if you want the table of contents to appear in the table of
contents itself!? Naturally it should appear first (even though it is
printed at the end of the document). You can use the tagging mechanism
described in Section~\use{sect.labels} to make a ``forward reference''
to the page number. At the beginning of the document you can create the
table of contents entry by saying
\TeXexample
\addTOC{0}{Table of Contents}{\noexpand\use{Pg.tabcontents}}
|endTeXexample
\noindent
The |\noexpand| prevents the \cs{use} from being expanded
until later, after the table of contents file is read in. Later, when
you actually print the table of contents you would first tag the page
number, then invoke \CS{Contents}, like so:
\TeXexample
\nosechead{Table of Contents}
\tag{Pg.tabcontents}{\folio}
\Contents
|endTeXexample
\noindent
For more information about \cs{tag} and \cs{use} see
Section~\use{sect.labels}.\relax
%>>> EOF TXSsects.doc <<<
$! =========== TXStags.tex ============
$ copy sys$input TXStags.tex
%% TXStags.tex TeXsis version 2.15
% $Revision: 15.4 $ : $Date: 92/06/30 11:04:31 $ : $Author: myers $
%======================================================================*
% TAGS - create lables for things - This file is a part of TeXsis
% (C) copyright 1991 by Eric Myers and Frank Paige.
%
\message{Labels and tags.}
% I/O and switches:
\newread\auxfilein % input for jobname.aux file
\newwrite\auxfileout % output for jobname.aux file
\newif\ifauxswitch \auxswitchtrue % enable writing to .aux file?
\let\XA=\expandafter \let\NX=\noexpand % shorthand
\catcode`"=12 % make sure " is not active
\catcode`@=11 % @ is a letter here
\newcount\@BadTags \@BadTags= 0 % count undefined tags
%==================================================*
% INITIALIZATION. \auxinit is used to open jobname.aux for output to
% save these definitions for the next run. It opens the file and then
% disables itself so it doesn't try to open the file again.
\def\auxinit{% once only initialization of auxilliary file
\ifauxswitch % if auxswitch true:
\immediate\openout\auxfileout=\jobname.aux % open new .aux file for output
\else % if auxswitch false:
\gdef\auxout##1##2{}% % turn off \tag 's writing to .aux file
\fi
\gdef\auxinit{\relax}} % disable \auxinit
% -- \auxout{csname}{value} writes the definition to the \jobname.aux file
\def\auxout#1#2{\auxinit % initialize .aux file
\immediate\write\auxfileout{% % write to file
\NX\expandafter\NX\gdef % \expandafter\gdef...
\NX\csname #1\NX\endcsname{#2}}% % \csname{data}
}
% \ReadAUX looks for a file called jobname.aux and if it exists reads
% it in. This file should have tag and label definitions from a
% previous run.
\def\ReadAUX{% reads in the auxilliary file from a previous run
\openin\auxfilein=\jobname.aux % open old .aux file for input
\ifeof\auxfilein\closein\auxfilein % if EOF it's empty.
\else\closein\auxfilein % else close it and...
\begingroup % fix up special characters...
\unSpecial %
\input\jobname.aux \relax % ...and read in the file
\endgroup % back to special characters
\fi} % else ignore it
%==================================================*
% TAGGING. Save information by labeling it.
%
% \tag{name}{<value>} defines the control sequence \@name@ to be
% <value>, and writes the definition to the file jobname.aux so
% jobs that follow can resolve forward references. (The @'s
% in \@name@ are a part of the name, and are included so that
% the user does not define a tag with the same name as a control
% sequence. The backslash is actually not a part of the name.)
% We use \csname ... \endcsname so that label names can include
% digits, numbers and other characters. It is not a good idea to
% use &,~,\,| or other special characters. Spaces may be included
% in a name, but they are ignored.
\def\tag{% \tag{name}{value} defines \@name@ to be "value"
\begingroup\unSpecial % to turn off special chars
\@tag} % do the tagging
\def\@tag#1#2{% does the work for \tag
\endgroup % end group from \tag
\edef\@@temp{#2}% % put ``value'' in \@@temp
\stripblanks @#1@\endlist % @name@ -> \tok w/o blanks
\XA\let\csname\tok\endcsname=\z@%% % zero out previous definition
\auxout{\tok}{\@@temp}% % write def to .aux file
\XA\xdef\csname\tok\endcsname{\@@temp}% define \@name@ as ``value''
}
%-------------------------*
% \label{name} tags \@name@ with the current value of \lab@l,
% which is set to the proper value by various macros, such as
% \chapter, \section, etc...
\def\label{% tags a label with the current value of \lab@l
\begingroup\unSpecial % make special characters plain
\@label}
\def\@label#1{%
\endgroup % special characters restored
\tag{#1}{\lab@l}} % tag it
\def\lab@l{\relax} % start with empty label
%-------------------------*
% \use{name} uses the value of \@name@ if it is defined; otherwise it
% puts {\bf "name"} into the text and writes an error message to the
% log file
\def\use{% \use{name} evaluates to \@name@, which is set by \tag
\begingroup %
\unSpecial %
\@use} %
\def\@use#1{% does the work for \use
\endgroup % end unspecial characters
\stripblanks @#1@\endlist % @name@ -> \tok w/o blanks
\XA\ifx\csname\tok\endcsname\relax\relax % is \@name@ undefined?
\emsg{> UNDEFINED TAG #1 ON PAGE \folio.}% % yes: error message
\advance\@BadTags by 1 % count how many
\@errmark{UNDEF}% % and mark in output
\edef\tok{{\bf\tok}}% % and return \bf ``name''
\else % else:
\edef\tok{\csname\tok\endcsname}% % get the definition
\fi %
\tok} % evaluate it
% -- \unSpecial makes certain special characters have ``normal''
% catcodes so they can be used in tag labels.
\def\unSpecial{% gives special characters ``normal'' catcodes
\catcode`@=11\catcode`"=12 % @ is a letter, " not active
\catcode`(=12\catcode`(=12 % ( and ) not active
\catcode`[=12\catcode`[=12 % [ and ] not active
\catcode`\&=12\catcode`\#=12 % & and # not active
}
% \stripblanks <text> \endlist removes extraneous blanks from
% the token list in <text> and puts the result in \tok.
% \tok is \empty if text is ALL blank.
\def\stripblanks{% everything up to \endlist --> \tok, with blanks removed
\let\tok=\empty\@stripblanks}
\def\@stripblanks#1{\def\next{#1}\@striplist}
\def\@striplist{%
\ifx\next\stripblanks\message{>\NX\@striplist: Oops!}\next=\endlist\fi %
\ifx\next\endlist\let\next=\relax %
\else\@stripspace\let\next=\@stripblanks\fi %
\next}
\def\@stripspace{\XA\if\space\next\else\edef\tok{\tok\next}\fi}
\def\endlist{\endlist} % \endlist is undefined on purpose
\def\tok{}
% \testtag{name} determines whether the label given by "name"
% is undefined, using the fact that \csname makes a default assignment
% of undefined control sequences to \relax, and sets \undefinedtrue
% or \undefinedfalse as appropriate. The full name is in \tok (with
% blanks removed) so you can use it with \csname\tok\endcsname.
% Use: \testtag{foo}\ifundefined <stuff> \else <other stuff> \fi
\newif\ifundefined \undefinedfalse
\def\testtag#1{\stripblanks @#1@\endlist
\XA\ifx\csname\tok\endcsname\relax\undefinedtrue
\else\undefinedfalse\fi}
% \checktags tells you if there were any undefined tags or references...
% Use this at the end of a run to warn about possible errors.
\def\checktags{% check for any undefined tags
\ifnum\@BadTags>\z@ % any undefine tags?
\emsg{>}\emsg{> There were \the\@BadTags\ undefined tags.}%
\emsg{> See the file \jobname.log for the citations, or try running}%
\emsg{> TeXsis again to resolve forward references.}\emsg{>}%
\fi}
%==================================================*
% PARSE LABELS.
%
% \LabelParse <text>;;\endlist parses <text> as an equation,
% figure or table label. It separates out letters, if present (eg.
% label;a for Figure 2a, but the ";" does not appear in output.)
% It increments the counter \@count, if appropriate, and builds an ID in
% \@ID. It also \tag's the label with the value of the ID,
% preceeding the label with the prefix \@prefix to distinguish its type.
\def\LabelParse#1;#2;#3\endlist{%
\if ?#3?\relax % if #3 is null, no ";" present
\global\advance\@count by\@ne % so advance count
\xdef\@ID{\@chaptID\@sectID\the\@count}% % construct value for label
\tag{\@prefix#1}{\@ID}% % tag the fig number
\else % if ; , look for letter
\stripblanks #2\endlist % remove any blanks from letter
\edef\p@rt{\tok}% % and save in \p@rt
\if a\p@rt\relax % if ";" present is it ";a"?
\global\advance\@count by\@ne\fi % yes: advance counter anyway
\xdef\@ID{\@chaptID\@sectID\the\@count}% % construct figure ID
\tag{\@prefix#1}{\@ID}% % and tag figure #nn
\xdef\@ID{\@chaptID\@sectID\the\@count\p@rt}% also fig # w/ letter
\tag{\@prefix#1;\p@rt}{\@ID}% % and tag #nn;x
\fi % end \if ?#3?
} % end of \LabelParse
\def\@ID{} % default \@ID is null
%>>> EOF TXStags.tex <<<